<?php
//	上传功能
	namespace KJ;
	class Upload{
		
		public $EXTS = array('jpeg','jpg','png','mp4','gif','txt');	/*限制上传文件类型*/
		public $size = 500000000;		/*限制上传文件大小*/
		public $savePath;
		public function __construct(){
			$this->savePath = './Public/Upload/'/*.date('y-m-d').'/'*/;		/*上传文件存放路径设置*/
		}
		
		/*单文件上传*/
		public function upload($name){
			$info = array();
			
			/*$_FILES系统提供的变量
			 * 获取用户提供的表单信息*/
			 
			/*判断上传文件大小
			 * 如果上传文件大于$size属性设置的数值
			 * 则将警告写入$info['error']中并返回*/
			if($_FILES[$name]['size'] > $this->size){		
				$info['error'] = '上传文件大小超出限制';
				return $info;
			}
						
			/*将上传文件的$_FILES[$name]['name']处理为可比较类型*/
			$type = $_FILES[$name]['name'];
			$type = strrchr($type,'.');		/*strrchr截取.后面的字符串*/
			$type = substr($type, 1);		/*substr从第一个字符开始截取后面的数据*/
			
			/*判断上传文件类型是否与$EXTS符合
			 * 如果不符合则将警告写入$info['error']并返回*/
			if(!in_array($type, $this->EXTS)){		
				$info['error'] = '上传类型不被允许';
				return $info;
			}
			
			/*uniqid()函数基于以微秒计的当前时间，生成一个唯一的 ID*/
			$filename = uniqid();
			
			/*将uniqid()函数生成的唯一的 ID和文件的类型相连组成文件名*/
			$filename = $filename . '.' . $type;
			$data = date('y-m-d').'/';
			/*is_dir（）函数来检查传入的路径参数是否为目录*/
			
			/*判断是否存在$this->savePath文件夹路径
			 * 不存在则创建文件夹路径*/
			if(!is_dir($this->savePath . $data)){
				
				/*mkdir()函数创建目录
				 * mkdir(path,mode,recursive,context)
				 * path	必需。规定要创建的目录的名称。
				 * mod	必需。规定权限。默认是 0777。
				 * recursive必需。规定是否设置递归模式。
				 * context	必需。规定文件句柄的环境
				 * 递归创建上传文件存放的文件夹路径*/			
				mkdir($this->savePath . $data,0755,TRUE);	
			}
			
			/*move_uploaded_file()函数将上传的文件移动到新位置
			 * move_uploaded_file(file,newloc)
			 * file	必需。规定要移动的文件
			 * newloc必需。规定文件的新位置*/
			$path = $this->savePath . $data . $filename;		/*文件存放路径*/
			$rs = move_uploaded_file($_FILES[$name]['tmp_name'], $path);
			
			/*判断文件是否上传成功，成功则将路径写入$info['realPath']*/
			if($rs){
				$info['realPath'] = $path;		/*返回上传文件存放路径*/
			}else{
				var_dump($rs);			
			}
			
			return $info;
		}

		/*多文件上传*/	
			
		public function uploads($name){
			
			$info = array();
			/*判断上传文件是否符合要求*/
			for($i = 0 ; $i < count($_FILES[$name]['name']);$i++){
				$filename = $_FILES[$name]['name'][$i];
				if($_FILES[$name]['size'][$i] > $this->size){
					$info[$i]['errorSize'] = "文件".$filename."大小超出限制";
				}
				$type = $_FILES[$name]['name'][$i];
				
				$type = strrchr($type,'.');
				$type = substr($type, 1);
				if(!in_array($type, $this->EXTS)){
					$info[$i]['errorType'] = "文件".$filename."的类型不被允许";
				}
			}
			/*判断变量是否已配置*/
			if(!empty($info)){
				return $info;
			}
			/*处理上传文件*/
			for($i = 0 ; $i < count($_FILES[$name]['name']); $i++){
				$filename = uniqid();
				$type = $_FILES[$name]['name'][$i];
				$type = strrchr($type,'.');
				$filename = $filename . $type;
				$date = date('y-m-d') . '/';
				if(!is_dir($this->savePath . $date)){
					mkdir($this->savePath . $date,0755,TRUE);
				}
				$path = $this->savePath . $date. $filename;
				$rs = move_uploaded_file($_FILES[$name]['tmp_name'][$i], $path);
				if($rs){
					$info[$i]['realPath'] = $path;
				}else{
					$info[$i]['unknownError'] = true;
				}
			}
			
			return $info;		/*处理结果返回至变量储存*/
			
		}
	}
?>